package com.yidu.service.impl;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.yidu.comment.Tools;
import com.yidu.dao.SnAuditMapper;
import com.yidu.dao.SnComPurDetailMapper;
import com.yidu.dao.SnComPurchaseMapper;
import com.yidu.dao.SnFiDetailMapper;
import com.yidu.dao.SnFinanceMapper;
import com.yidu.model.SnAudit;
import com.yidu.model.SnComPurchase;
import com.yidu.model.SnFiDetail;
import com.yidu.model.SnFinance;
import com.yidu.model.SnUser;
import com.yidu.service.FinancesChaseSnAuditService;

/**
 * 分公司审核
 * @author wuqi
 * @date 2019年1月3日
 */
@Service
public class FinancesChaseSnAuditServiceImpl implements FinancesChaseSnAuditService{

	/**
	 * 注入采购表
	 */
	@Resource
	SnComPurchaseMapper scpm;

	/**
	 * 注入采购详情表
	 */
	@Resource
	SnComPurDetailMapper scpdm;
	/**
	 * 注入审核表
	 */
	@Resource
	SnAuditMapper sam;
	/**
	 * 注入财务表
	 */
	@Resource
	SnFinanceMapper sfm;
	/**
	 * 注入财务详情表
	 */
	@Resource
	SnFiDetailMapper sfdm;
	/**
	 * 查询财务采购审核表
	 */
	@Override
	public List<SnComPurchase> findAllFinances(Map<String, Object> maps) {
		List<SnComPurchase> list = scpm.findAllFinances(maps);
		return list;
	}
	/**
	 * 查询财务采购表行数
	 */
	@Override
	public int findFinancesCount(Map<String, Object> maps) {
		return scpm.findFinancesCount(maps);
	}
	/**
	 * 分公司财务点击审核改变采购表，增加审核表
	 */
	@Override
	public int financessnaudit(String purId,Integer isva,Integer sort,Integer auState,String auIdea,String purSum,SnUser user) {
		//根据公司id查询分公司财务																		sb
		SnFinance sf = sfm.selectBraId(user.getBraId());
		//用double类型装总金额
		Double sum = Double.valueOf(purSum);
		
			//得到采购表对象
			SnComPurchase scp = new SnComPurchase();
			//把采购id赋值到属性采购ID里去
			scp.setPurId(purId);
			
			if(isva==2) {  //分公司财务审核
				if(auState==0) {  //不同意
					scp.setSort(4);					//排序赋值4
					scp.setIsva(0);					//是否有效赋值0
				}else { //同意
					//总金额大于查询出的分公司总金额
					if(sum > sf.getFinMoney().doubleValue()) {
						return 2;					//返回2
					}
					scp.setSort(sort);				//排序赋值参数
					scp.setIsva(isva);				//是否有效赋值参数
					//得到一个map
					Map<String,Object> map = new HashMap<>();
					//公司id放到map里
					map.put("id", user.getBraId());
					//总金额放到map里
					map.put("sum", sum);
					//修改分公司财务金额
					sfm.updateByForenigKey(map);
					//通过本公司查询本公司财务表的id													  fbf
					SnFinance finid = sfm.findByFinId(user.getBraId());
					//得到财务详情表
					SnFiDetail sfd = new SnFiDetail();
					//采购详情id
					sfd.setFdId(Tools.getDateOrderNo());
					//财务id
					sfd.setFinId(finid.getFinId());
					//金额
					sfd.setFdMoney(BigDecimal.valueOf(sum));
					//支出用途
					sfd.setFdExplain("采购商品减少财务金额"+sum);
					//是否有效1
					sfd.setIsva(1);
					//时间
					sfd.setOptime(Tools.getTimeStr(new Date()));
					//通过财务id增加一条财务详情表
					sfdm.insertSelective(sfd);
				}
			}else if(isva==3) {   //分公司经理审核
				if(auState==0) {	//不同意
					//排序赋值4
					scp.setSort(4);
					//isva赋值0
					scp.setIsva(0);
				}else {
					//排序赋值参数
					scp.setSort(sort);
					//isva赋值参数
					scp.setIsva(isva);
				}
			}
			
			//修改状态
			int rows1 = scpm.updateByPrimaryKeySelective(scp);
			
			//得到审核对象
			SnAudit sa = new SnAudit();
			
			//审核id
			sa.setAuId(Tools.getDateOrderNo());
			//业务id
			sa.setAllId(purId);
			//审核时间
			sa.setOptime(Tools.getTimeStr(new Date()));
			//审核人
			sa.setOper(user.getUserName());
			//审核状态
			sa.setAuState(auState);
			//审核意见
			sa.setAuIdea(auIdea);
			//审核部门
			if(isva==2) {
				//分公司财务审核
				sa.setAuComment("分公司财务审核");
			}else {
				//分公司经理审核
				sa.setAuComment("分公司经理审核");
			}
			
			//增加审核表
			int rows2 = sam.insertSelective(sa);
			//12都大于零是
			if(rows1>0 && rows2>0) {
				return 1;
			}else {
				return 0;
			}
	}
	
	/**
	 * 查询详情表
	 */
	@Override
	public List<SnComPurchase> findFinancesAll(Map<String, Object> maps) {
		return scpdm.findFinancesAll(maps);
	}
	/**
	 * 查询详情表行数
	 */
	@Override
	public int findAllFinancesCount(Map<String, Object> maps) {
		return scpdm.findAllFinancesCount(maps);
	}
}
